package datastructure.hash;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class LC242 {
    //比较垃圾的算法，使用了两个额外空间
    public boolean isAnagram1(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        Map<Character, Integer> map = new HashMap<>(s.length());
        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        Map<Character, Integer> map1 = new HashMap<>(t.length());
        for (char c : t.toCharArray()) {
            map1.put(c, map1.getOrDefault(c, 0) + 1);
        }
        for (Character string : map.keySet()) {
            if (!Objects.equals(map.get(string), map1.get(string))) {
                return false;
            }
        }
        return true;
    }

    //通过数组存储26个字母各出现的次数，对于s字符串，每个字符数量++， 对于t字符串，每个字符数量--， 最后数组元素都为0则返回true
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        //用于存储26个字母
        int[] arr = new int[26];
        //此时两个数组的长度一定相等
        char[] cs = s.toCharArray();
        char[] ct = t.toCharArray();
        //一增一减，可能会出现负数，如果返回true的话，最终都会变成0
        for (int i = 0; i < cs.length; i++) {
            arr[cs[i] - 'a']++;
            arr[ct[i] - 'a']--;
        }
        for (int i : arr) {
            if (i != 0){
                return false;
            }
        }
        return true;
    }
}
